﻿// ******************************************************************
// 项目名称 :WSPay
// 项目描述 :
// 文件名称 : Notify.cs
// 版  本 : v1.0.0.0
// 说  明 :  
// 作  者 : mengzhong
// 邮  箱 :coodream@live.com
// 命名空间 : WSPay.Weixin
// 创建时间 : 2018.01.31.15:56
// 更新时间 : 2018.01.31.15:56
// ******************************************************************
//  Copyright meng zhong  2018. All rights reserved.
// ******************************************************************

using System.Net;
using System.Text;

namespace WSPay.Weixin
{
    /// <summary>
    /// 回调处理基类
    /// 主要负责接收微信支付后台发送过来的数据，对数据进行签名验证
    /// 子类在此类基础上进行派生并重写自己的回调处理过程
    /// </summary>
    public class Notify
    {
        public HttpWebRequest page { get; set; }
        public Notify(HttpWebRequest page)
        {
            this.page = page;
        }

        /// <summary>
        /// 接收从微信支付后台发送过来的数据并验证签名
        /// </summary>
        /// <returns>微信支付后台返回的数据</returns>
        public WxPayData GetNotifyData()
        {
//            //接收从微信后台POST过来的数据
//            System.IO.Stream s =h.InputStream;
//            int count = 0;
//            byte[] buffer = new byte[1024];
//            StringBuilder builder = new StringBuilder();
//            while ((count = s.Read(buffer, 0, 1024)) > 0)
//            {
//                builder.Append(Encoding.UTF8.GetString(buffer, 0, count));
//            }
//            s.Flush();
//            s.Close();
//            s.Dispose();
//
//         
//
//            //转换数据格式并验证签名
//            WxPayData data = new WxPayData();
//            try
//            {
//                data.FromXml(builder.ToString());
//            }
//            catch (WxPayException ex)
//            {
//                //若签名错误，则立即返回结果给微信支付后台
//                WxPayData res = new WxPayData();
//                res.SetValue("return_code", "FAIL");
//                res.SetValue("return_msg", ex.Message);
//               //Log.Error(this.GetType().ToString(), "Sign check error : " + res.ToXml());
//                page.Response.Write(res.ToXml());
//                page.Response.End();
//            }

            //Log.Info(this.GetType().ToString(), "Check sign success");
            //return data;
            return null;
        }

        //派生类需要重写这个方法，进行不同的回调处理
        public virtual void ProcessNotify()
        {

        }
    }
}